package com.caixin.application.user.map;

import com.caixin.domain.user.agg.User;
import com.caixin.domain.user.types.unique.UserId;
import com.caixin.service.user.command.UserAddCmd;
import com.caixin.service.user.dto.UserDTO;
import org.mapstruct.Mapping;
import org.mapstruct.Named;


/**
*application.user Map
*
* @author caixin
* @version 1.0.0
* @date 2021年12月11日 14:17
*/
@org.mapstruct.Mapper(componentModel = "spring")
public interface UserMap {


    /**
     * 创建用户Cmd->用户Agg(Map)
     *
     * @param cmd ccx
     * @return com.domain.user.agg.User
     * @date 2021/11/19 15:00
     */
    @Mapping(source = "userPassword", target = "userPassword")
    User userAddCmdFormat(UserAddCmd cmd);


    /**
     * 请输入功能描述
     *
     * @param agg:
     * @return com.service.user.dto.UserDTO
     * @date 2021年12月09日 20:15
     */
    @Mapping(expression = "java(convertTo(agg.getCreateDate().toString()))", target = "userName")
    @Mapping(source = "userPassword", target = "userPassword")
    @Mapping(source = "id", target = "userId", qualifiedByName = "toId")
    UserDTO aggToUserDTO(User agg);

    /**
     * 请输入功能描述
     *
     * @param code:
     * @return java.lang.String
     * @date 2021年12月09日 20:17
     */
    @Named("myConvertTo")
    default String convertTo(String code) {
        return code;
    }

    /**
     * toId
     *
     * @param id:
     * @return java.lang.String
     * @date 2021年12月09日 20:17
     */
    @Named("toId")
    default Long toId(UserId id) {
        return id == null ? null : id.getValue();
    }
}


